#include "mhscpu.h"
#include "mhscpu_it.h"
#include <string.h>
#include <stdio.h>
#include "ring_buffer.h"

#include "uart_test.h"


extern UART_TestStructure UARTx_Structure;
extern UART_TestStructure UARTy_Structure;


/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/******************************************************************************/
/*            Cortex-M3 Processor Exceptions Handlers                         */
/******************************************************************************/

/**
  * @brief  This function handles NMI exception.
  * @param  None
  * @retval None
  */
void NMI_Handler(void)
{
}

/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Memory Manage exception.
  * @param  None
  * @retval None
  */
void MemManage_Handler(void)
{
  /* Go to infinite loop when Memory Manage exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Bus Fault exception.
  * @param  None
  * @retval None
  */
void BusFault_Handler(void)
{
  /* Go to infinite loop when Bus Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Usage Fault exception.
  * @param  None
  * @retval None
  */
void UsageFault_Handler(void)
{
  /* Go to infinite loop when Usage Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles SVCall exception.
  * @param  None
  * @retval None
  */
void SVC_Handler(void)
{
}

/**
  * @brief  This function handles Debug Monitor exception.
  * @param  None
  * @retval None
  */
void DebugMon_Handler(void)
{
}

/**
  * @brief  This function handles PendSVC exception.
  * @param  None
  * @retval None
  */
void PendSV_Handler(void)
{
}

/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
void SysTick_Handler(void)
{
	printf("SysTick_Handler\r\n");
}

/******************************************************************************/
/*                 STM32F10x Peripherals Interrupt Handlers                   */
/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
/*  available peripheral interrupt handler's name please refer to the startup */
/*  file (startup_stm32f10x_xx.s).                                            */
/******************************************************************************/

/**
  * @brief  This function handles PPP interrupt request.
  * @param  None
  * @retval None
  */

//void UART2_IRQHandler(void)
//{
//	UART_TypeDef * UARTx = UARTy_Structure.UART;

//	switch(UARTx->OFFSET_8.IIR & 0x0f)
//	{
//	case UART_IT_ID_RX_RECVD:
//		{
//			printf("UART_IT_ID_RX_RECVD In\n");
//			while(UART_IsRXFIFONotEmpty(UARTx))
//			{
//				UARTy_Structure.ReceBuf[UARTy_Structure.ReceCount] = UART_ReceiveData(UARTx);
//				UARTy_Structure.ReceCount++;
//			}
//			UART_ITConfig(UARTx, UART_IT_RX_RECVD, DISABLE);
//		}
//		break;
//	case UART_IT_ID_CHAR_TIMEOUT:
//		{
//			printf("UART_IT_ID_CHAR_TIMEOUT In\n");
//			UARTy_Structure.ReceBuf[UARTy_Structure.ReceCount] = UART_ReceiveData(UARTx);
//			UARTy_Structure.ReceCount++;
//			UART_ITConfig(UARTx, UART_IT_RX_RECVD, DISABLE);
//		}
//		break;
//	case UART_IT_ID_TX_EMPTY:
//		{
//			printf("UART_IT_ID_TX_EMPTY In\n");
//			UART_SendData(UARTx, 0x55);
//			UART_ITConfig(UARTx, UART_IT_TX_EMPTY, DISABLE);
//		}
//		break;
//	case UART_IT_ID_MODEM_STATUS:
//		{
//			uint32_t msr = UARTx->MSR;			
//		}
//		break;
//	case UART_IT_ID_LINE_STATUS:
//		{
//			uint32_t lsr = UARTx->LSR;			
//		}	
//		break;
//	case UART_IT_ID_BUSY_DETECT:
//		{
//			uint32_t usr = UARTx->USR;			
//		}	
//		break;
//		
//	default:
//		break;

//	}
//	NVIC_ClearPendingIRQ(UART2_IRQn);
//}
/**/

